package com.jhy.suixianglu.daima20230112;

public class ReverseStr {
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        // 注意点 1 每次是2k一个循环 所以i += 2k
        for (int i = 0; i < chars.length; i += 2 * k) {
            // 注意点 2 因为我们后面小于k个的，后面的字符会单独进行反转
            // 例如 当前位置加上k 大于了字符数组的长度了。后面全进行反转
            if (i + k <= chars.length) {
                // 这里设置的左闭右闭 所以 i+k-1
                reverse(chars, i, i + k-1);
                // 注意点 3这里我们反转了前k个 就跳出当前循环 开启下一部分
                continue;
            }
            // 注意点 4 反转后面的字符
            reverse(chars, i, chars.length-1);
        }
        return new String(chars);
    }
    // 注意点 5
    private void reverse(char[] s, int i, int j) {
        for (; i < j; i++, j--) {
            char temp = s[i];
            s[i] = s[j];
            s[j] = temp;
        }
    }
}
